home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / ASM-SPAR.{_6 / SIGINFO.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  5KB  |  202 lines

  1. /* $Id: siginfo.h,v 1.3 1998/08/26 10:33:29 davem Exp $
  2.  * siginfo.c:
  3.  */
  4.  
  5. #ifndef _SPARC_SIGINFO_H
  6. #define _SPARC_SIGINFO_H
  7.  
  8. #include <linux/types.h>
  9.  
  10. typedef union sigval {
  11.     int sival_int;
  12.     void *sival_ptr;
  13. } sigval_t;
  14.  
  15. #define SI_MAX_SIZE    128
  16. #define SI_PAD_SIZE    ((SI_MAX_SIZE/sizeof(int)) - 3)
  17.  
  18. typedef struct siginfo {
  19.     int si_signo;
  20.     int si_errno;
  21.     int si_code;
  22.  
  23.     union {
  24.         int _pad[SI_PAD_SIZE];
  25.  
  26.         /* kill() */
  27.         struct {
  28.             pid_t _pid;        /* sender's pid */
  29.             uid_t _uid;        /* sender's uid */
  30.         } _kill;
  31.  
  32.         /* POSIX.1b timers */
  33.         struct {
  34.             unsigned int _timer1;
  35.             unsigned int _timer2;
  36.         } _timer;
  37.  
  38.         /* POSIX.1b signals */
  39.         struct {
  40.             pid_t _pid;        /* sender's pid */
  41.             uid_t _uid;        /* sender's uid */
  42.             sigval_t _sigval;
  43.         } _rt;
  44.  
  45.         /* SIGCHLD */
  46.         struct {
  47.             pid_t _pid;        /* which child */
  48.             uid_t _uid;        /* sender's uid */
  49.             int _status;        /* exit code */
  50.             clock_t _utime;
  51.             clock_t _stime;
  52.         } _sigchld;
  53.  
  54.         /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
  55.         struct {
  56.             void *_addr;    /* faulting insn/memory ref. */
  57.             int  _trapno;    /* TRAP # which caused the signal */
  58.         } _sigfault;
  59.  
  60.         /* SIGPOLL */
  61.         struct {
  62.             int _band;    /* POLL_IN, POLL_OUT, POLL_MSG */
  63.             int _fd;
  64.         } _sigpoll;
  65.     } _sifields;
  66. } siginfo_t;
  67.  
  68. /*
  69.  * How these fields are to be accessed.
  70.  */
  71. #define si_pid        _sifields._kill._pid
  72. #define si_uid        _sifields._kill._uid
  73. #define si_status    _sifields._sigchld._status
  74. #define si_utime    _sifields._sigchld._utime
  75. #define si_stime    _sifields._sigchld._stime
  76. #define si_value    _sifields._rt._sigval
  77. #define si_int        _sifields._rt._sigval.sival_int
  78. #define si_ptr        _sifields._rt._sigval.sival_ptr
  79. #define si_addr        _sifields._sigfault._addr
  80. #define si_trapno    _sifields._sigfault._trapno
  81. #define si_band        _sifields._sigpoll._band
  82. #define si_fd        _sifields._sigpoll._fd
  83.  
  84. /*
  85.  * si_code values
  86.  * Digital reserves positive values for kernel-generated signals.
  87.  */
  88. #define SI_USER        0    /* sent by kill, sigsend, raise */
  89. #define SI_KERNEL    0x80    /* sent by the kernel from somewhere */
  90. #define SI_QUEUE    -1    /* sent by sigqueue */
  91. #define SI_TIMER    -2    /* sent by timer expiration */
  92. #define SI_MESGQ    -3    /* sent by real time mesq state change */
  93. #define SI_ASYNCIO    -4    /* sent by AIO completion */
  94. #define SI_SIGIO    -5    /* sent by queued SIGIO */
  95.  
  96. #define SI_FROMUSER(siptr)    ((siptr)->si_code <= 0)
  97. #define SI_FROMKERNEL(siptr)    ((siptr)->si_code > 0)
  98.  
  99. /*
  100.  * SIGILL si_codes
  101.  */
  102. #define ILL_ILLOPC    1    /* illegal opcode */
  103. #define ILL_ILLOPN    2    /* illegal operand */
  104. #define ILL_ILLADR    3    /* illegal addressing mode */
  105. #define ILL_ILLTRP    4    /* illegal trap */
  106. #define ILL_PRVOPC    5    /* privileged opcode */
  107. #define ILL_PRVREG    6    /* privileged register */
  108. #define ILL_COPROC    7    /* coprocessor error */
  109. #define ILL_BADSTK    8    /* internal stack error */
  110. #define NSIGILL        8
  111.  
  112. /*
  113.  * SIGFPE si_codes
  114.  */
  115. #define FPE_INTDIV    1    /* integer divide by zero */
  116. #define FPE_INTOVF    2    /* integer overflow */
  117. #define FPE_FLTDIV    3    /* floating point divide by zero */
  118. #define FPE_FLTOVF    4    /* floating point overflow */
  119. #define FPE_FLTUND    5    /* floating point underflow */
  120. #define FPE_FLTRES    6    /* floating point inexact result */
  121. #define FPE_FLTINV    7    /* floating point invalid operation */
  122. #define FPE_FLTSUB    8    /* subscript out of range */
  123. #define NSIGFPE        8
  124.  
  125. /*
  126.  * SIGSEGV si_codes
  127.  */
  128. #define SEGV_MAPERR    1    /* address not mapped to object */
  129. #define SRGV_ACCERR    2    /* invalid permissions for mapped object */
  130. #define NSIGSEGV    2
  131.  
  132. /*
  133.  * SIGBUS si_codes
  134.  */
  135. #define BUS_ADRALN    1    /* invalid address alignment */
  136. #define BUS_ADRERR    2    /* non-existant physical address */
  137. #define BUS_OBJERR    3    /* object specific hardware error */
  138. #define NSIGBUS        3
  139.  
  140. /*
  141.  * SIGTRAP si_codes
  142.  */
  143. #define TRAP_BRKPT    1    /* process breakpoint */
  144. #define TRAP_TRACE    2    /* process trace trap */
  145. #define NSIGTRAP
  146.  
  147. /*
  148.  * SIGCHLD si_codes
  149.  */
  150. #define CLD_EXITED    1    /* child has exited */
  151. #define CLD_KILLED    2    /* child was killed */
  152. #define CLD_DUMPED    3    /* child terminated abnormally */
  153. #define CLD_TRAPPED    4    /* traced child has trapped */
  154. #define CLD_STOPPED    5    /* child has stopped */
  155. #define CLD_CONTINUED    6    /* stopped child has continued */
  156. #define NSIGCHLD
  157.  
  158. /*
  159.  * SIGPOLL si_codes
  160.  */
  161. #define POLL_IN        1    /* data input available */
  162. #define POLL_OUT    2    /* output buffers available */
  163. #define POLL_MSG    3    /* input message available */
  164. #define POLL_ERR    4    /* i/o error */
  165. #define POLL_PRI    5    /* high priority input available */
  166. #define POLL_HUP    6    /* device disconnected */
  167. #define NSIGPOLL    6
  168.  
  169. /*
  170.  * sigevent definitions
  171.  * 
  172.  * It seems likely that SIGEV_THREAD will have to be handled from 
  173.  * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
  174.  * thread manager then catches and does the appropriate nonsense.
  175.  * However, everything is written out here so as to not get lost.
  176.  */
  177. #define SIGEV_SIGNAL    0    /* notify via signal */
  178. #define SIGEV_NONE    1    /* other notification: meaningless */
  179. #define SIGEV_THREAD    2    /* deliver via thread creation */
  180.  
  181. #define SIGEV_MAX_SIZE    64
  182. #define SIGEV_PAD_SIZE    ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
  183.  
  184. typedef struct sigevent {
  185.     sigval_t sigev_value;
  186.     int sigev_signo;
  187.     int sigev_notify;
  188.     union {
  189.         int _pad[SIGEV_PAD_SIZE];
  190.  
  191.         struct {
  192.             void (*_function)(sigval_t);
  193.             void *_attribute;    /* really pthread_attr_t */
  194.         } _sigev_thread;
  195.     } _sigev_un;
  196. } sigevent_t;
  197.  
  198. #define sigev_notify_function    _sigev_un._sigev_thread._function
  199. #define sigev_notify_attributes    _sigev_un._sigev_thread._attribute
  200.  
  201. #endif /* !(_SPARC_SIGINFO_H) */
  202.